package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

// @Configuration：标记此类为Spring配置类，替代XML配置文件
@Configuration
public class ThreadPoolConfig {

    // @Bean：将方法返回的ThreadPoolExecutor对象托管到Spring IOC容器
    // 方法名“threadPoolExecutor”即为Bean的id（后续从容器获取时用此id）
    @Bean
    public ThreadPoolExecutor threadPoolExecutor() {
        // 线程池核心参数（根据需求调整，此处为通用配置）
        int corePoolSize = 2;          // 核心线程数（常驻线程）
        int maximumPoolSize = 4;       // 最大线程数（核心线程满+队列满后，最多再创建的线程数）
        long keepAliveTime = 60;       // 非核心线程空闲存活时间
        TimeUnit unit = TimeUnit.SECONDS; // 存活时间单位
        // 任务队列（阻塞队列，容量为10，超出后触发最大线程数）
        ArrayBlockingQueue<Runnable> workQueue = new ArrayBlockingQueue<>(10);

        // 创建并返回线程池对象（Spring会自动托管此对象）
        return new ThreadPoolExecutor(
                corePoolSize,
                maximumPoolSize,
                keepAliveTime,
                unit,
                workQueue
        );
    }
}